Spring Boot ক্লায়েন্টে OAuth2 এর মাধ্যমে Access Token সংগ্রহ করা একটি সাধারণ কাজ, বিশেষত যখন API সুরক্ষিত থাকে এবং অ্যাক্সেসের জন্য টোকেন প্রয়োজন হয়। নিচে একটি উদাহরণসহ ধাপে ধাপে প্রক্রিয়াটি ব্যাখ্যা করা হলো।
OAuth2 Access Token সংগ্রহের ধাপসমূহ
ডিপেনডেন্সি যোগ করুন Spring Security এবং OAuth2 ক্লায়েন্ট লাইব্রেরি যোগ করুন।
Maven Dependency:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency>
Application Properties বা YAML ফাইল কনফিগার করুন OAuth2 প্রোভাইডার সম্পর্কিত তথ্য সেট করুন। যেমন, ক্লায়েন্ট আইডি, সিক্রেট, এবং টোকেন ইউআরএল।
application.properties:
spring.security.oauth2.client.registration.my-client.client-id=your-client-id spring.security.oauth2.client.registration.my-client.client-secret=your-client-secret spring.security.oauth2.client.registration.my-client.authorization-grant-type=client_credentials spring.security.oauth2.client.registration.my-client.scope=read,write spring.security.oauth2.client.provider.my-client.token-uri=https://auth-server.com/oauth/tokenব্যাখ্যা:
client-id: OAuth প্রোভাইডার থেকে প্রাপ্ত ক্লায়েন্ট আইডি।client-secret: OAuth প্রোভাইডার থেকে প্রাপ্ত সিক্রেট।authorization-grant-type: সাধারণতclient_credentials।token-uri: টোকেন সংগ্রহ করার জন্য ইউআরএল।
RestTemplate বা WebClient ব্যবহার করে Access Token সংগ্রহ করুন
RestTemplate ব্যবহার করে:
import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import java.util.Base64; import java.util.HashMap; import java.util.Map; @Service public class OAuth2TokenService { private final RestTemplate restTemplate; public OAuth2TokenService(RestTemplate restTemplate) { this.restTemplate = restTemplate; } public String getAccessToken() { String url = "https://auth-server.com/oauth/token"; // Basic Authentication Header String clientId = "your-client-id"; String clientSecret = "your-client-secret"; String credentials = clientId + ":" + clientSecret; String encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes()); HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", "Basic " + encodedCredentials); headers.add("Content-Type", "application/x-www-form-urlencoded"); Map<String, String> body = new HashMap<>(); body.put("grant_type", "client_credentials"); HttpEntity<Map<String, String>> request = new HttpEntity<>(body, headers); ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.POST, request, Map.class); return response.getBody().get("access_token").toString(); } }
WebClient ব্যবহার করে:
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.stereotype.Service; import reactor.core.publisher.Mono; @Service public class OAuth2TokenService { private final WebClient webClient; public OAuth2TokenService(WebClient.Builder webClientBuilder) { this.webClient = webClientBuilder.baseUrl("https://auth-server.com").build(); } public Mono<String> getAccessToken() { return webClient.post() .uri("/oauth/token") .headers(headers -> { headers.setBasicAuth("your-client-id", "your-client-secret"); headers.setContentType(org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED); }) .bodyValue("grant_type=client_credentials") .retrieve() .bodyToMono(Map.class) .map(response -> response.get("access_token").toString()); } }
Spring Security OAuth2 Client (Auto-Configuration ব্যবহার): Spring Security-এর OAuth2 Client ব্যবহার করলে Spring নিজেই টোকেন সংগ্রহ করতে পারে।
Service Class উদাহরণ:
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager; import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; @Service public class ApiService { private final WebClient webClient; public ApiService(OAuth2AuthorizedClientManager authorizedClientManager) { this.webClient = WebClient.builder() .filter(new ServerOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager)) .build(); } public Mono<String> fetchData() { return webClient.get() .uri("https://api.example.com/protected-resource") .retrieve() .bodyToMono(String.class); } }
উদাহরণ Access Token ব্যবহার করে API কল
Access Token সংগ্রহের পর এটি HTTP Header-এ পাঠিয়ে API কল করা হয়।
public String fetchData(String accessToken) {
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer " + accessToken);
HttpEntity<String> entity = new HttpEntity<>(headers);
String apiUrl = "https://api.example.com/protected-resource";
ResponseEntity<String> response = restTemplate.exchange(apiUrl, HttpMethod.GET, entity, String.class);
return response.getBody();
}
উপসংহার
Spring Boot-এ OAuth2 Access Token সংগ্রহের জন্য:
- Spring Security OAuth2 Client ব্যবহার করুন যদি স্বয়ংক্রিয়ভাবে টোকেন সংগ্রহ করতে চান।
- ম্যানুয়ালি করতে হলে
RestTemplateবাWebClientব্যবহার করুন।
এটি নিরাপদ অ্যাপ্লিকেশন তৈরির একটি গুরুত্বপূর্ণ অংশ।
Read more